package br.com.sovi.resources.dispositivo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;

import org.openinsula.vulcano.core.command.invoker.CommandInvoker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import br.com.sovi.persistence.Dispositivo;
import br.com.sovi.persistence.Empresa;
import br.com.sovi.resources.Constants;

@Component
@Path("/dispositivo")
@Produces(Constants.MEDIA_TYPE_PRODUCES)
public class DispositivoResource {
	private final Logger logger = LoggerFactory.getLogger(getClass());

	@Autowired
	private CommandInvoker commandInvoker;

	@GET
	@Path("/allByEmpresa")
	public List<DispositivoVO> allByEmpresa(@QueryParam("codigoEmpresa") final String codigoEmpresa) {
		logger.debug("Capturando todos os dispositivos.");

		Empresa empresa = commandInvoker.invoke(new FindEmpresaByCodigo(codigoEmpresa));

		if (empresa != null) {
			Collection<Dispositivo> dispostivos = commandInvoker.invoke(new GetDispositivoByEmpresa(empresa));

			List<DispositivoVO> vos = new ArrayList<DispositivoVO>();

			for (Dispositivo dispositivo : dispostivos) {
				vos.add(new DispositivoVO(dispositivo));
			}

			return vos;
		}
		else {
			return null;
		}
	}

}
